package com.xdcplus.web.service.pm;

import com.xdcplus.mp.service.BaseService;
import com.xdcplus.pager.vo.PageVO;
import com.xdcplus.web.common.pojo.dto.pm.PmShiftManageDTO;
import com.xdcplus.web.common.pojo.dto.pm.PmShiftManageFilterDTO;
import com.xdcplus.web.common.pojo.entity.pm.PmShiftManage;
import com.xdcplus.web.common.pojo.vo.pm.GetPmNowShiftVo;
import com.xdcplus.web.common.pojo.vo.pm.PmShiftManageVO;
import com.xdcplus.web.common.pojo.vo.pm.PmShiftManageWithPlanVO;
import com.xdcplus.web.common.pojo.vo.pm.PmShiftShortVO;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;


/**
 * 排班管理(PmShiftManage)表服务接口层
 *
 * @author Fish.Fei
 * @since 2023-02-06 16:05:53
 */
public interface PmShiftManageService extends BaseService<PmShiftManage, PmShiftManage, PmShiftManageVO> {

    /**
     * 添加排班管理(PmShiftManage)
     *
     * @param pmShiftManageDTO 排班管理(PmShiftManageDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean savePmShiftManage(PmShiftManageDTO pmShiftManageDTO);

    /**
     * 修改排班管理(PmShiftManage)
     *
     * @param pmShiftManageDTO 排班管理(PmShiftManageDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean updatePmShiftManage(PmShiftManageDTO pmShiftManageDTO);

    /**
     * 批量保存或更新排班管理(PmShiftManage)
     *
     * @param pmShiftManageList 排班管理(PmShiftManageList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatch(List<PmShiftManage> pmShiftManageList);

    /**
     * 批量保存或更新排班管理(PmShiftManageDTOList)
     *
     * @param pmShiftManageDTOList 排班管理(PmShiftManageDTOList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatchByDTOList(List<PmShiftManageDTO> pmShiftManageDTOList);

    /**
     * 删除排班管理(PmShiftManage)
     *
     * @param id 排班管理(PmShiftManage)主键
     * @return {@link Boolean} 是否成功
     */
    Boolean deletePmShiftManageLogical(Long id);
    
    Boolean deletePmShiftManageByIds(String ids);

    /**
     * 查询排班管理(PmShiftManage)
     *
     * @param pmShiftManageFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<PmShiftManageVO>} 状态信息
     */
    List<PmShiftManageVO> queryPmShiftManageVOList(PmShiftManageFilterDTO pmShiftManageFilterDTO);

    /**
     * 查询排班管理(PmShiftManage)
     *
     * @param pmShiftManageFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<PmShiftManageVO>} 状态信息
     */
    PageVO<PmShiftManageVO> queryPmShiftManage(PmShiftManageFilterDTO pmShiftManageFilterDTO);

    /**
     * 查询一个
     *
     * @param id 排班管理(PmShiftManage)主键
     * @return {@link PmShiftManageVO} 排班管理(PmShiftManage)信息
     */
    PmShiftManageVO queryPmShiftManageById(Long id);

    PmShiftManageWithPlanVO queryPmShiftManageByNowTimeAndDate(String nowTime, String date, Long shiftType);

    PmShiftManageWithPlanVO queryPmShiftManageByNowTimeAndDate1(String nowTime, Long shiftType);

    /**
     * @Description 按参数日期查询班次信息
     */
    PmShiftManageVO getPmShiftByDate(Date date);

    PmShiftShortVO remotePmShiftInfo(Timestamp date);

    /**
     * 固定模式，计算班次信息
     * 08-20 白班，当天
     * 20-08+ 晚班，20-00+ 当天， 00+-08+前一天
     * @param date
     * @return
     */
    PmShiftShortVO fixPmShiftInfo(Timestamp date);

    /**
     * 根据当前日期的班次信息
     * @return
     */
    GetPmNowShiftVo getPmShiftByNowTime();
    GetPmNowShiftVo getPmShiftByTimestamp(Timestamp timestamp);

    /**
     * 根据id查询班次名称
     * @param id
     * @return
     */
    String getShiftNameById(Long id);

    List<PmShiftManageVO> getPmShiftByCode(String shiftCode);


}
